home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / TURB_VIS / TVSPY / TEXTWIN.PAS < prev    next >
Pascal/Delphi Source File  |  1990-12-17  |  4KB  |  156 lines

  1. unit TextWin;
  2. {$B-}
  3.  
  4. interface
  5.  
  6. uses objects, drivers, views, textcoll;
  7.  
  8.  
  9. const
  10.  
  11. { TTextInterior.Status values: }
  12.   tiOK             =  0;
  13.   tiError          = -1;
  14.   tiCollectionFull = -2;
  15.  
  16.  
  17. type
  18.  
  19.  
  20.   { TTextInterior
  21.     Rollover    : Determines Append action when collection is full.
  22.                   Rollover = true, then 1st line of collection is deleted
  23.                                    and new line is append to end (Default).
  24.                   Rollover = false, Status is set to -2 Collection Full
  25.  
  26.     ScrollFollow: Determines whether Append moves the scroller position.
  27.                   ScrollFollow = true, then scroller is moved to bottom of
  28.                                  display list and redrawn (default).
  29.                   ScrollFollow = false, then no change is made to the
  30.                                  scroller's position.
  31.   }
  32.  
  33.   PTextInterior = ^TTextInterior;
  34.   TTextInterior = object(TScroller)
  35.     Lines: TTextCollection;
  36.     RollOver: boolean;
  37.     ScrollFollow: boolean;
  38.     Status: integer;
  39.     constructor Init( R: TRect; MaxLines: integer;
  40.                       AHScrollbar, AVScrollbar: PScrollbar);
  41.     destructor Done;  virtual;
  42.     procedure Append(st: Pstring);  virtual;
  43.     procedure Draw;  virtual;
  44.     end;
  45.  
  46.  
  47.   PTextWindow = ^TTextWindow;
  48.   TTextWindow = object(TWindow)
  49.     Interior: PTextInterior;
  50.     constructor Init( R: TRect; NewTitle: string; Num, MaxLines: integer);
  51.     procedure MakeInterior( MaxLines: integer);  virtual;
  52.     end;
  53.  
  54.  
  55.  
  56.  
  57. implementation
  58.  
  59. constructor TTextInterior.Init( R: TRect; MaxLines: integer;
  60.                                 AHScrollbar, AVScrollbar: PScrollbar);
  61.   begin
  62.   TScroller.Init(R, AHScrollbar, AVScrollbar);
  63.   if MaxLines = 0 then
  64.     Lines.Init(Size.X, 1)     { let it grow unchecked:  16K items max}
  65.   else
  66.     Lines.Init(Maxlines, 0);  { fix size and rollover when full }
  67.   SetLimit(128,Size.X);
  68.   GrowMode := gfGrowHiX + gfGrowHiY;
  69.   RollOver := True;
  70.   ScrollFollow := true;
  71.   end;
  72.  
  73.  
  74.  
  75. destructor TTextInterior.Done;
  76.   begin
  77.   Lines.Done;
  78.   TScroller.Done;
  79.   end;
  80.  
  81.  
  82.  
  83. procedure TTextInterior.Append( st: PString);
  84.   begin
  85.   if Lines.Count < Lines.Limit then    { let it grow }
  86.     begin
  87.     Lines.Insert(st);
  88.     if Lines.Count > Size.Y then
  89.       begin
  90.       SetLimit(128,Lines.Count);
  91.       if ScrollFollow then
  92.         VScrollbar^.SetValue(Lines.Count);
  93.       end;
  94.     end
  95.   else
  96.     { Lines.Count = Lines.Limit }
  97.     if Rollover then
  98.       begin
  99.       Lines.Free(Lines.At(0));    { zap the old string }
  100.       Lines.Insert(st);           { before adding new one }
  101.       if ScrollFollow then
  102.         VScrollBar^.SetValue(Lines.Count);
  103.       end
  104.     else
  105.       Status := tiCollectionFull;
  106.  
  107.   DrawView;  { show the changes }
  108.   end;
  109.  
  110.  
  111.  
  112. procedure TTextInterior.Draw;
  113.   var color: byte;
  114.       Y, I : integer;
  115.       B: TDrawBuffer;
  116.   begin                            { draw only what's visible }
  117.   Color:= GetColor(1);
  118.   for y:= 0 to Size.Y-1 do
  119.     begin
  120.     MoveChar(B,' ',Color,Size.X);
  121.     I:= Delta.Y+Y;
  122.     if (I < Lines.Count) and (Lines.At(I) <> nil) then
  123.       MoveStr(B, Copy(PString(Lines.At(I))^,Delta.X+1, Size.X), Color);
  124.     WriteLine(0,Y,Size.X,1,B);
  125.     end;
  126.   end;
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133. constructor TTextWindow.Init( R: TRect; NewTitle: string;
  134.                               Num, MaxLines: integer);
  135.   begin
  136.   TWindow.Init(R,NewTitle, Num);
  137.   MakeInterior(MaxLines);
  138.   end;
  139.  
  140.  
  141.  
  142. procedure TTextWindow.MakeInterior( MaxLines: integer);
  143.   var R: TRect;
  144.  
  145.   begin
  146.   GetExtent(R);
  147.   R.Grow(-1,-1);
  148.   Interior := new(PTextInterior, Init(R, MaxLines,
  149.                                       StandardScrollBar(sbHorizontal),
  150.                                       StandardScrollBar(sbVertical)));
  151.   Insert( Interior );
  152.   end;
  153.  
  154.  
  155.  
  156. end.